package com.zzj.ecology.system.service.system;

import com.zzj.ecology.system.bean.system.SysUser;
import com.zzj.ecology.system.dto.HttpResult;
import com.zzj.ecology.system.domain.Page;

import java.util.List;

/**
 * @ClassName SysUserService
 * @Description TODO
 * @Author zhijun zeng at 23:47 2020/4/1
 * @Version 1.0
 **/
public interface SysUserService {

    /**
     * 根据登录用户ID查询登录用户信息
     * @param userId
     * @return
     */
    SysUser findById(Integer userId);

    /**
     * 根据登录用户名查询登录用户信息
     * @param username
     * @return
     */
    SysUser findByUsername(String username);

    /**
     * 分页查询数据
     * @param page
     * @return
     */
    HttpResult findPageList(Page page);

    /**
     * 添加新用户, 并选择 岗位
     * @param sysUser
     * @param postId
     * @return
     */
    HttpResult createAndBuildPostDeptRelation(SysUser sysUser, Integer postId);

    /**
     * 查询用户是否存在,存在 true, 不存在false
     * @param username
     * @return
     */
    boolean checkUsernameExist(String username);

    /**
     * 修改上回登录信息
     * @return
     */
    int updateLoginDateAndLoginIpByUsername(SysUser sysUser);

    /**
     * 批量删除用户,并更新用户的修改时间及修改人字段
     * @param userids
     * @param username
     * @return
     */
    HttpResult updateDeleteStatusByIds(List<Integer> userids, String username);

    /**
     * 修改用户信息, 并重新 建立 用户与部门  用户与岗位 的关联关系
     * @param sysUser
     * @param postId
     * @return
     */
    HttpResult updateAndReBuildPostDeptRelation(SysUser sysUser, Integer postId);

    /**
     * 给当前用户重新授予角色权限,先删除用户与角色关联(注意非标记删除),再重新创建新的关联。并且更新 userid 用户对应的修改人员和修改时间
     * @param userId
     * @param roleIds
     * @param username
     * @return
     */
    int regrantUserRolesByLoginUser(Integer userId, List<Integer> roleIds, String username);

    /**
     * 给用户初始化密码操作
     * @param sysUser
     * @return
     */
    int initializePassword(SysUser sysUser);

    /**
     * 更新用户账号状态  启用 停用
     * @param sysUser
     * @return
     */
    int updateUserStatus(SysUser sysUser);
}
